<?php

class MinutaController extends Controller {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';

    /**
     * @return array action filters
     */
    public function filters() {
        return array(
            'accessControl', // perform access control for CRUD operations
            //'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules() {
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('view','vistaPrevia'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('index','create','update','admin','delete','finalizarAcuerdo','aprobarMinuta','adminMinutasEnLasQueParticipo','adminMinutasEnLasQueSoyResponsable'),
				'users'=>array('@'),
			),			
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}


    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $participantes = $this->obtenerParticipantesMinuta($id);
        $actividades = $this->obtenerActividadesMinuta($id);
        $acuerdos = $this->obtenerAcuerdosMinuta($id);
        $nombre_CreadorDeMinuta = $this->obtenerCreadorDeMinuta($id);
        $permisoDeCreadorDeMinuta = $this->verificarPermisosDeMinuta($id);
        $acuerdosSinResponsables = $this->obtenerAcuerdosSinResponsables($id);        
        $session = new CHttpSession;
        $session->open();
        $idUsuarioSession = $session['id_usuario'];
        $this->render('view', array(
            'model' => $this->loadModel($id),
            'participantes' => $participantes,
            'acuerdos' => $acuerdos,
            'actividades' => $actividades,
            'creadorDeMinuta'=>$nombre_CreadorDeMinuta,
            'aprobo'=>$permisoDeCreadorDeMinuta,
            'idUsuarioSesion'=> $idUsuarioSession,
            'acuerdosSinResponsables' => $acuerdosSinResponsables,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
		$model=new Minuta;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);
                
                $session = new CHttpSession;
                $session -> open();
                
                if(isset($session['id_usuario'])){
                    $usuario = Usuario::model()->findByPk($session['id_usuario']);
                    
                    if($usuario->permiso_creacion_minuta == 1){
                        if(isset($_POST['Minuta']))
                        {
                                $model->attributes=$_POST['Minuta'];

                                //Asignar la fecha en que se creo la minuta
                                $fechaCreacionDeLaMinuta = new DateTime();
                                $result = $fechaCreacionDeLaMinuta->format('Y-m-d H:i:s');
                                $model->fecha_sistema = $result;

                                //Se toma el id del usuario de la sesi�n para asignarlo como creador de la minuta
                                $model->id_usuario_creador = $usuario->id;

                                if($model->save())
                                        $folioMinuta = str_pad((int) $model->id,5,"0",STR_PAD_LEFT);
                                        Yii::app()->user->setFlash('success','La Minuta con folio #'.$folioMinuta.' fue creada exitosamente.');
                                        $this->redirect(array('view','id'=>$model->id));                                                  
                        }

                        $this->render('create',array(
                                'model'=>$model,
                        ));
                    }
                    else{
                        throw new CHttpException(403, 'No tiene permisos para crear una nueva Minuta.');
                    }
                }
                else{
                    throw new CHttpException(403, 'No tiene persisos para crear una nueva Minuta.');
                }
	}


    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        
                $session = new CHttpSession;
                $session -> open();
                
                if(isset($session['id_usuario'])){
                    $model=$this->loadModel($id);
                    
                    if($model->id_usuario_creador == $session['id_usuario']){
                        
                        // Uncomment the following line if AJAX validation is needed
                        // $this->performAjaxValidation($model);

                        if(isset($_POST['Minuta']))
                        {
                                $model->attributes=$_POST['Minuta'];
                                if($model->save())
                                        $folioMinuta = str_pad((int) $model->id,5,"0",STR_PAD_LEFT);
                                        Yii::app()->user->setFlash('success','La Minuta con folio #'.$folioMinuta.' fue actualizada exitosamente.');
                                        $this->redirect(array('view','id'=>$model->id));
                        }

                        $this->render('update',array(
                                'model'=>$model,
                        ));
                        
                    }
                    else{
                        throw new CHttpException(403, 'No puede editar la minuta porque usted no la creo.');
                    }
                }
                else{
                    throw new CHttpException(403, 'No tiene persisos para modificar la Minuta.');
                }
	}


    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        $session = new CHttpSession;
        $session -> open();

        if(isset($session['id_usuario'])){
            
            $model=$this->loadModel($id);
            
            if($model->id_usuario_creador == $session['id_usuario']){
                
                $model->delete();
                
                Yii::app()->user->setFlash('success','La Minuta fue eliminada exitosamente.');

                // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
                if (!isset($_GET['ajax']))
                    $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
                
            }
            else{
                throw new CHttpException(403, 'No puede eliminar la minuta porque usted no la creo.');
            }
        }
        else{
            throw new CHttpException(403, 'No tiene persisos para eliminar la Minuta.');
        }
    }

    /**
     * Lists all models.
     */
    public function actionIndex() {
                $session = new CHttpSession;
                $session -> open();
                
                if(isset($session['id_usuario'])){
            
                    $dataProvider=new CActiveDataProvider('Minuta', array('criteria' => array('condition' => 'id_usuario_creador= :id', 'params'=>array(':id'=>$session['id_usuario']))));
                    $this->render('index',array(
                            'dataProvider'=>$dataProvider,
                    ));
                }
                else{
                    throw new CHttpException(403, 'No tiene persisos para acceder a esta informacion.');
                }
	}

    /**
     * Manages all models.
     */
    public function actionAdmin() {
                
                $session = new CHttpSession;
                $session -> open();
                
                if(isset($session['id_usuario'])){
        
                    $model=new Minuta('search');
                    $model->unsetAttributes();  // clear any default values
                    if(isset($_GET['Minuta']))
                            $model->attributes=$_GET['Minuta'];

                    $this->render('admin',array(
                            'model'=>$model,
                    ));
                }
                else{
                    throw new CHttpException(403, 'No tiene persisos para acceder a esta informacion.');
                }
	}
        
        /**
        * Manages all models.
        */
       public function actionAdminMinutasEnLasQueParticipo() {

                   $session = new CHttpSession;
                   $session -> open();

                   if(isset($session['id_usuario'])){

                       $model=new Minuta('search');
                       $model->unsetAttributes();  // clear any default values
                       if(isset($_GET['Minuta']))
                               $model->attributes=$_GET['Minuta'];

                       $this->render('adminMinParticipo',array(
                               'model'=>$model,
                       ));
                   }
                   else{
                       throw new CHttpException(403, 'No tiene persisos para acceder a esta informacion.');
                   }
           }
           
           /**
        * Manages all models.
        */
       public function actionAdminMinutasEnLasQueSoyResponsable() {

                   $session = new CHttpSession;
                   $session -> open();

                   if(isset($session['id_usuario'])){

                       $model=new Minuta('search');
                       $model->unsetAttributes();  // clear any default values
                       if(isset($_GET['Minuta']))
                               $model->attributes=$_GET['Minuta'];

                       $this->render('adminMinResponsable',array(
                               'model'=>$model,
                       ));
                   }
                   else{
                       throw new CHttpException(403, 'No tiene persisos para acceder a esta informacion.');
                   }
           }


        public function actionVistaPrevia($id){
            $participantes = $this->obtenerParticipantesMinuta($id);
            $actividades = $this->obtenerActividadesMinuta($id);
            $acuerdos = $this->obtenerAcuerdosMinuta($id);
            $nombre_CreadorDeMinuta = $this->obtenerCreadorDeMinuta($id);
            $permisoDeCreadorDeMinuta = $this->verificarPermisosDeMinuta($id);
            $acuerdosSinResponsables = $this->obtenerAcuerdosSinResponsables($id); 
            $session = new CHttpSession;
            $session->open();
            $idUsuarioSession = $session['id_usuario'];
            $this->render('impresion', array(
                'model' => $this->loadModel($id),
                'participantes' => $participantes,
                'acuerdos' => $acuerdos,
                'actividades' => $actividades,
                'creadorDeMinuta'=>$nombre_CreadorDeMinuta,
                'aprobo'=>$permisoDeCreadorDeMinuta,
                'idUsuarioSesion'=> $idUsuarioSession,
                'acuerdosSinResponsables' => $acuerdosSinResponsables,
            ));
        }
        
    /**
     * 
     * @param type $id id del acuerdo
     */    
    public function actionFinalizarAcuerdo($id,$idMinuta){
       $acuerdo =  Acuerdo::model()->findByPk($id);
       $acuerdo->finalizado = 1;
       $acuerdo->update();
       $participantes = $this->obtenerParticipantesMinuta($idMinuta);
        $actividades = $this->obtenerActividadesMinuta($idMinuta);
        $acuerdos = $this->obtenerAcuerdosMinuta($idMinuta);
        $nombre_CreadorDeMinuta = $this->obtenerCreadorDeMinuta($idMinuta);
        $aprobo = $this->verificarPermisosDeMinuta($idMinuta);
        $acuerdosSinResponsables = $this->obtenerAcuerdosSinResponsables($id); 
        $session = new CHttpSession;
        $session->open();
        $idUsuarioSession = $session['id_usuario'];
        $this->render('view', array(
            'model' => $this->loadModel($idMinuta),
            'participantes' => $participantes,
            'acuerdos' => $acuerdos,
            'actividades' => $actividades,
            'creadorDeMinuta'=>$nombre_CreadorDeMinuta,
            'aprobo'=>$aprobo,
            'idUsuarioSesion'=> $idUsuarioSession,
            'acuerdosSinResponsables' => $acuerdosSinResponsables,
        ));
    }
/**
 * 
 * @param type $id id de la minuta
 */
    public function actionAprobarMinuta($id){
        $session = new CHttpSession;
        $session->open();
        $idUsuarioSession = $session['id_usuario'];
        $sql = 'select * from statusminutaparticipante where id_minuta = :id and id_usuario_participante = :idUsuarioSesion';
        $relacion = StatusMinutaParticipante::model()->findBySql($sql,array(':id' => $id,':idUsuarioSesion'=>$idUsuarioSession));
        $relacion->aprobo = 1;
        $relacion->update();
        $participantes = $this->obtenerParticipantesMinuta($id);
        $actividades = $this->obtenerActividadesMinuta($id);
        $acuerdos = $this->obtenerAcuerdosMinuta($id);
        $nombre_CreadorDeMinuta = $this->obtenerCreadorDeMinuta($id);
        $aprobo = $this->verificarPermisosDeMinuta($id);
        $acuerdosSinResponsables = $this->obtenerAcuerdosSinResponsables($id); 
        
        $this->render('view', array(
            'model' => $this->loadModel($id),
            'participantes' => $participantes,
            'acuerdos' => $acuerdos,
            'actividades' => $actividades,
            'creadorDeMinuta'=>$nombre_CreadorDeMinuta,
            'aprobo'=>$aprobo,
            'idUsuarioSesion'=> $idUsuarioSession,
            'acuerdosSinResponsables' => $acuerdosSinResponsables,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer $id the ID of the model to be loaded
     * @return Minuta the loaded model
     * @throws CHttpException
     */
    public function loadModel($id) {
        $model = Minuta::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param Minuta $model the model to be validated
     */
    protected function performAjaxValidation($model) {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'minuta-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    private function establecerAsistencia($id_asistencia) {
        $asistencia = "No";
        if ($id_asistencia == 1) {
            return $asistencia = "Si";
        } else {
            return $asistencia;
        }
    }

    private function obtenerActividadesMinuta($idMinuta) {
        // obteniendo las actividades de la minuta
        $sql_obtener_actividades = 'select * from actividad where id_minuta = :idMinuta';
        return $actividades = Actividad::model()->findAllBySql($sql_obtener_actividades, array(':idMinuta' => $idMinuta));
    }

    private function obtenerAcuerdosMinuta($idMinuta) {
        $acuerdos = array();
        $sql_Rel_Minuta_Acuerdos = 'select * from acuerdo where id_minuta = :id';
        $arrayAcuerdosDeMinuta = Acuerdo::model()->findAllBySql($sql_Rel_Minuta_Acuerdos, array(':id' => $idMinuta));
        $sql_Rel_Participantes_Acuerdos = 'select * from statusacuerdoparticipante where id_acuerdo = :id';

        foreach ($arrayAcuerdosDeMinuta as $acuerdo) {
            $arrayAcuerdos_Participante = StatusAcuerdoParticipante::model()->findAllBySql($sql_Rel_Participantes_Acuerdos, array(':id' => $acuerdo->id));
            foreach ($arrayAcuerdos_Participante as $acuerdo_participante) {
                // obteniendo el id del acuerdo
                $id_Acuerdo = $acuerdo_participante->id_usuario;
                $sql_rel_participante_acuerdos = 'select nombres, primer_apellido, segundo_apelldio from usuario where id = :id_Acuerdo';
                $datos_Acuerdo_Participante = Usuario::model()->findBySql($sql_rel_participante_acuerdos, array(':id_Acuerdo' => $id_Acuerdo));
                
                //hidratando el arreglo de cada acuerdo

                $datos_acuerdo_minuta = array(
                    'responsable' => $datos_Acuerdo_Participante->nombres . ' ' . $datos_Acuerdo_Participante->primer_apellido . ' ' . $datos_Acuerdo_Participante->segundo_apelldio,
                    'id'=>$acuerdo->id,
                    'descripcion' => $acuerdo->descripcion,
                    'idParticipanteAcuerdo' => $acuerdo_participante->id_usuario,
                    'finalizado' => $acuerdo->finalizado,
                    'fechaProgramada' => $acuerdo->fecha_fin,
                    'idStatusAcuerdoParticipante' => $acuerdo_participante->id,
                );
                array_push($acuerdos, $datos_acuerdo_minuta);
            }
        }
        return $acuerdos;
    }

//    private function establecerFinalizado($id_finalizado) {
//        $finalizacion = '<h6>Si</h6>';
//        if ($id_finalizado == 0) {
//            return $button = '<input class="btn btn-success" type="button" value="Finalizar">';
//        } else {
//            return $finalizacion;
//        }
//    }

    private function obtenerParticipantesMinuta($id_minuta) {
        $participantes = array();
        $sql_Rel_Participantes_Minuta = 'select * from statusminutaparticipante where id_minuta = :id';
        $arrayParticipantes = StatusMinutaParticipante::model()->findAllBySql($sql_Rel_Participantes_Minuta, array(':id' => $id_minuta));
        foreach ($arrayParticipantes as $participante) {
            // obteniendo el nombre del participante
            $id_Participante = $participante->id_usuario_participante;
            $sql_datos_participante_minuta = 'select nombres, primer_apellido, segundo_apelldio, id_departamento from usuario where id = :id_Participante';
            $datosParticipante = Usuario::model()->findBySql($sql_datos_participante_minuta, array(':id_Participante' => $id_Participante));
            // obteniendo el departamento del participante
            $id_Departamento = $datosParticipante->id_departamento;
            $departamento = Departamento::model()->findByPk($id_Departamento);
            $nombre_departamento = $departamento->nombre;
            $asistencia = $this->establecerAsistencia($participante->asistio);
            $aprobo = $this->establecerAsistencia($participante->aprobo);
            //hidratando el arreglo del participante
            $datos_minuta_participante = array(
                'nombres' => $datosParticipante->nombres . ' ' . $datosParticipante->primer_apellido . ' ' . $datosParticipante->segundo_apelldio,
                'asistio' => $asistencia,
                'aprobo' => $aprobo,
                'departamento' => $nombre_departamento,                
            );
            array_push($participantes, $datos_minuta_participante);
        }
        return $participantes;
    }

    private function obtenerCreadorDeMinuta($id_Minuta) {
        $minuta = Minuta::model()->findByPk($id_Minuta);
        $id_usuario_creador_minuta = $minuta->id_usuario_creador;
        $usuario_creador = Usuario::model()->findByPk($id_usuario_creador_minuta);
        $nombre_creador_minuta = $usuario_creador->nombres .' '. $usuario_creador->primer_apellido .' '. $usuario_creador->segundo_apelldio; 
        return $nombre_creador_minuta;
    }

    private function verificarPermisosDeMinuta($id_Minuta) {
          $sql_relacion_participante_aprobo = 'select aprobo from statusminutaparticipante where id_minuta = :id_Minuta and id_usuario_participante = :id_usuario';
          $session = new CHttpSession;
        $session->open();
        $idUsuarioSession = $session['id_usuario'];  
          $aprobo = StatusMinutaParticipante::model()->findBySql($sql_relacion_participante_aprobo, array(':id_Minuta' => $id_Minuta,':id_usuario' =>$idUsuarioSession));
          if($aprobo == null){
              return 1;
          }
          else{
          return $aprobo->aprobo;    
          }
                  
    }
    
    private function obtenerAcuerdosSinResponsables($id_Minuta) {
          $sqlAcuerdosSinResponsables = 
            'select * from acuerdo a
            left join statusacuerdoparticipante sap on sap.id_acuerdo = a.id
            where a.id_minuta= :id_Minuta and sap.id is NULL';
            
          $acuerdosSinResponsables = Acuerdo::model()->findAllBySql($sqlAcuerdosSinResponsables, array(':id_Minuta' => $id_Minuta));
//          if($aprobo == null){
//              return 1;
//          }
//          else{
          return $acuerdosSinResponsables;
          //}
    }

}
